package com.example.workqueue;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.Message;

import java.io.IOException;

/*
 * @className: WorkerQueueConsumer
 * @description 一个生产者,一个队列,多个消费者
 * 一个队列对应了多个消费者，默认情况下，由队列对消息进行平均分配，消息会被分到不同的消费者手中。
 * 消费者可以配置各自的并发能力，进而提高消息的消费能力，也可以配置手动 ack，来决定是否要消费某一条消息。
 * @since JDK1.8
 * @author ljh
 * @createdAt  2022/1/19
 * @version 1.0.0
 **/
//@Component
public class WorkerQueueConsumer {
    //@RabbitListener(queues = {DirectConfig.QUEUE_NAME})
    public void reciveMsg(Message message, Channel channel) throws IOException {
        System.out.println("msg:" + message.getPayload());
        //手动确认消息
        channel.basicAck(((Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG)),true);

    }

   // @RabbitListener(queues = {RabbitConfig.QUEUE_NAME}, concurrency = "10") //此消费者的并发能力为10
    public void reciveMsg2(Message message, Channel channel) throws IOException {
        //拒绝消费所有消息
        channel.basicReject(((Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG)),true);
    }
}
